package com.yyge.web.filrter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/*")
public class A_Encoding_Filter implements Filter {
    private  static Logger logger= LoggerFactory.getLogger(A_Encoding_Filter.class);
    /**
     * filter是一个运行中的对象，在用户请求达到servlet之前执行。
     * 过滤器中可以根据业务逻辑来决定请求是否放行；
     *  如果过滤器没有放行请求，则过滤器中直接将结果响应给客户端，
     *  请求没有达到servlet如果过滤器放行了请求，则将请求传递到下一个过滤器，
     *  如果已经没有了后续过滤器，则执行servlet
     *  当servlet响应请求时，同样也会按照过滤器的执行流程的倒序执行一次
     *
     *  init,doDFilter,destroy三个方法属于Filter过滤器生命周期方法
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
       logger.debug("编码设置: 过滤器对象被web容器初始化以后执行的方法；--------init--------");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
      logger.debug("编码设置:过滤器接收到来自客户端的请求:--------doFilter--------");
        //如果放行请求，则执行chain中的方法
        // 如果不放行请求，则执行响应，不要执行chain的方法
        /*设置请求和相应编码*/
        HttpServletRequest req=(HttpServletRequest)servletRequest;
        HttpServletResponse resp=(HttpServletResponse)servletResponse;

        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("appliction/json;charset=utf-8");
      filterChain.doFilter(req,resp);//进入下一个过滤器或者servlet

        logger.debug("编码设置:过滤器响应客户端请求");
    }

    @Override
    public void destroy() {
        //服务器重启，关闭时执行过滤器的销毁方法
      logger.debug("编码设置：执行销毁方法，--------destroy--------");
    }
}
